教你用STM32获取全球疫苗接种数据
中国疾控中心免疫规划首席专家王华庆说,我国要建立免疫屏障,可能需要10亿以上的人接种新冠疫苗,接种率越高,免疫屏障就越牢固。
张文宏医生说,“年轻人打疫苗是为国家做贡献,最好在今年打、尽快打!”。最近,你打疫苗了吗?
上周三,我去打疫苗了,第一针。预约,健康状况询问,打针,观察,人不算太多,整个流程下来很顺利,目前没有任何的不良反应。
去年春节期间,宅在家为国家做贡献的期间,我做了一系列的疫情数据监控练手小项目,比如基于桌面Qt的,基于STM32MP157的,基于STM32F103裸机和RT-Thread版本的,可能很多读者都是从那个时候开始关注我的。
其中PC桌面和ARM Linux版本的程序代码,由于国内疫情的好转,使用到的API接口可能已经关闭,或者JSON数据格式有很大的改动,所以在运行时,会出现程序异常停止,或者无数据显示的情况,这是正常的。
而STM32F103裸机和RTOS版本,前几天我试了一下,还是可以正常运行的。
从3月24日起,我国启动了新冠疫苗接种数据的日报制度,国家卫健委每日会在官网公布疫苗接种总数,这也是人类疫苗接种史上首次启动国家级最大规模的日报制度。
能不能把之前做的疫情数据监控改为疫苗接种数据呢?放在桌面上,看着每天新增的接种数据,关注着我国逐步建立免疫屏障的进度!先上微信看看,有没有疫苗接种相关的数据,果然,有实时的全球疫苗接种数据。
由于之前做过类似的项目,所以做起来还是比较简单的。改一下API接口,JSON解析函数,调整一下显示界面就可以了。于是之前的项目就变成了全球新冠疫苗接种数据实时监控平台。名字很唬人,其实很简单。效果展示:
这个小项目的代码是完全开源的,你可以在文末获取项目的Gitee仓库地址,或者关注公众号【电子电路开发学习】,在后台回复【STM32疫苗】关键词,来直接获取代码压缩包的下载链接。
下面介绍如何来制作这样一个全球新冠疫苗接种数据实时监控平台,并不需要和我一样的硬件,只需要了解整个项目的实现过程,在任何平台上实现都是一样的。
主要包括以下内容:
1.硬件平台准备
2.API接口获取
3.ESP8266配置
4.JSON数据解析
5.LCD数据显示
6.开源地址
1.硬件平台准备
基本硬件主要有以下:
一款主控芯片。比如ARM、51、AVR等平台,最好是片上外设多一点的,GPIO,串口,定时器这些,如果带有WiFi功能就更好了,这意味着可以省掉一个WiFi模块。如ESP8266就是一款具有WiFi功能的MCU,可以进行SDK开发。
一个联网模块。比如WiFi,2G/4G,有线以太网等,如果主控芯片带有WiFi功能,可以省略!
一个显示设备。比如LCD,OLED,墨水屏,点阵屏等,用于数据的显示。
一些必要的调试工具。如下载器,USB-TTL模块等,最重要的是要有一颗不怕困难的心。
这里我使用的是STM32+ESP8266的方案,通过AT指令的方式和WiFi模块进行交互。
主要包括以下硬件模块:
STM32F103RET6,主控芯片,完成串口交互,LCD控制等
ESP8266-01,用于连接WiFi获取数据
3.2' TFT LCD,用于显示数据
SPI Flash,用于存储字库
LED,用于指示状态
J-Link,USB-TTL,用于程序调试与下载。
实际开发板如下,这是一款我在大学期间自己画的小板子:
2.API接口获取
API和之前一样是通过腾讯新闻获取,使用浏览器打开腾讯新闻-实时接种数据页面:
https://news.qq.com/ylh5/worldvaccine.htm#/
PC和手机端界面:
F12打开开发者模式,切换到Network
网络面板,刷新页面,找到请求的URL,可以看到是POST方式:
并使用浏览器直接访问这个页面,
可以看到是GET方式:
说明支持两种HTTP请求方式:
GET:
182.254.21.58:443
https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=VaccineTopData
POST:
182.254.21.36:443
https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=VaccineTopData
3.ESP8266配置
有了IP地址,端口号和API地址,下一步就是使用ESP8266来访问这个API接口,并得到返回的数据。为了和之前的程序兼容,这里我选择的是GET请求的方式。EPS8266使用AT指令的方式进行配置,由于之前的项目已经完成了ESP8266配置的部分,只需要修改一下IP地址,端口号和API地址即可,配置流程使用串口打印出来,如下:
可以看到返回的数据是常用的JSON格式字符串,长度为265字节。有了JSON数据,下一步就是对数据进行解析,使用的是cJSON解析库,由于数据格式比较简单,解析函数也不多。
格式化之后的数据:
4.JSON数据解析
由于数据比较简单,解析函数就不贴出来了。可以点击:了解JSON格式,使用cJSON解析,使用cJSON构建,获取以往的文章介绍。
在解析数据时,要注意,其中"中国","全球"汉字为UTF-8编码,在Keil中进行键值解析时,需要修改字符编码为UTF-8:
或者在GBK2312编码状态下,键值对字符串"中国"="涓浗",这一点要特别注意:
5.LCD数据显示
LCD显示部分,和上一个项目有所不同,之前是把使用到的部分字体进行取模,获取点阵数据,然后再显示出来。这次我是读取板子上的SPI Flash字库文件,然后进行显示的,这样可以显示所有的文字,比较方便。UI界面比较简单,没有采用GUI库。
6.开源地址
这个项目的代码工程已经开源在国内的Gitee平台:
STM32获取疫苗接种数据
gitee.com/whik/stm32_ncov_vaccine
STM32获取肺炎疫情数据
gitee.com/whik/stm32_2019_ncov
关注公众号【电子电路开发学习】,在后台回复【STM32疫苗】关键词,来直接获取代码压缩包的下载链接。
本来计划根据IP定位的地址,然后查询距离最近的接种点信息,但是没找到合适的API接口,如果腾讯开放这种类型的接口,我也会更新的,欢迎大家关注,Fork & Star!
WiFi和API接口配置信息在config.h文件里:
这个项目,总体来说,没有太多的技术含量和实用价值,但是作为一个学习的小项目还是很不错的!如果修改一下接口,比如改为天气信息,空气质量,新闻动态,股票信息,尾号限行,油价信息等等,放在工作桌面上,也算是一个比较有科技感的摆件了!
一起苗苗苗
中国疾控中心免疫规划首席专家王华庆说,如果大家都把接种疫苗往后拖,那么免疫屏障就永远建立不起来,我们想摘掉口罩的愿望可能就不会实现。如果大家接种得快,这个屏障可能就会早一天到来。要尽早恢复到正常的生活,疫苗是目前的最佳选择。
新冠肺炎是百年难遇的灾难,要全面控制病毒的传播,使人类社会恢复正常的生活,办法只有一个:实现群体免疫!而实现群体免疫最快最好的方法就是:打疫苗!为了自己的安全,也为了尽快建立免疫屏障,在这里倡议大家尽快去接种,建立全民免疫,需要你的一“臂”之力!